home *** CD-ROM | disk | FTP | other *** search
/ IRIX 6.5 Complementary Applications 2004 May / SGI IRIX 6.5 Complementary Applications 2004 May.iso / dist / PPRO.idb / usr / include / cups / image.h.z / image.h
Encoding:
C/C++ Source or Header  |  2004-01-20  |  7.7 KB  |  250 lines

  1. /*
  2.  * "$Id: image.h,v 1.17 2002/12/17 18:59:28 swdev Exp $"
  3.  *
  4.  *   Image library definitions for the Common UNIX Printing System (CUPS).
  5.  *
  6.  *   Copyright 1993-2003 by Easy Software Products.
  7.  *
  8.  *   These coded instructions, statements, and computer programs are the
  9.  *   property of Easy Software Products and are protected by Federal
  10.  *   copyright law.  Distribution and use rights are outlined in the file
  11.  *   "LICENSE.txt" which should have been included with this file.  If this
  12.  *   file is missing or damaged please contact Easy Software Products
  13.  *   at:
  14.  *
  15.  *       Attn: CUPS Licensing Information
  16.  *       Easy Software Products
  17.  *       44141 Airport View Drive, Suite 204
  18.  *       Hollywood, Maryland 20636-3111 USA
  19.  *
  20.  *       Voice: (301) 373-9603
  21.  *       EMail: cups-info@cups.org
  22.  *         WWW: http://www.cups.org
  23.  *
  24.  *   This file is subject to the Apple OS-Developed Software exception.
  25.  */
  26.  
  27. #ifndef _IMAGE_H_
  28. #  define _IMAGE_H_
  29.  
  30. /*
  31.  * Include necessary headers...
  32.  */
  33.  
  34. #  include <stdio.h>
  35. #  include <stdlib.h>
  36. #  include <string.h>
  37. #  include <errno.h>
  38. #  include <config.h>
  39. #  include "raster.h"
  40.  
  41.  
  42. /*
  43.  * Maximum image dimensions that we can handle...
  44.  */
  45.  
  46. #  define IMAGE_MAX_WIDTH    0x07ffffff    /* 2^27-1 to allow for 15-channel data */
  47. #  define IMAGE_MAX_HEIGHT    0x7fffffff    /* 2^31-1 */
  48.  
  49. /*
  50.  * Colorspaces...
  51.  */
  52.  
  53. #  define IMAGE_CMYK    -4        /* Cyan, magenta, yellow, and black */
  54. #  define IMAGE_CMY    -3        /* Cyan, magenta, and yellow */
  55. #  define IMAGE_BLACK    -1        /* Black */
  56. #  define IMAGE_WHITE    1        /* White (luminance) */
  57. #  define IMAGE_RGB    3        /* Red, green, and blue */
  58. #  define IMAGE_RGB_CMYK 4        /* Use RGB or CMYK */
  59.  
  60. /*
  61.  * Tile definitions...
  62.  */
  63.  
  64. #  define TILE_SIZE    256        /* 256x256 pixel tiles */
  65. #  define TILE_MINIMUM    10        /* Minimum number of tiles */
  66.  
  67. /*
  68.  * min/max/abs macros...
  69.  */
  70.  
  71. #ifndef max
  72. #  define     max(a,b)    ((a) > (b) ? (a) : (b))
  73. #endif /* !max */
  74. #ifndef min
  75. #  define     min(a,b)    ((a) < (b) ? (a) : (b))
  76. #endif /* !min */
  77. #ifndef abs
  78. #  define    abs(a)        ((a) < 0 ? -(a) : (a))
  79. #endif /* !abs */
  80.  
  81.  
  82. /*
  83.  * Image byte type...
  84.  */
  85.  
  86. typedef unsigned char ib_t;
  87.  
  88. /*
  89.  * Tile cache structure...
  90.  */
  91.  
  92. typedef struct ic_str
  93. {
  94.   struct ic_str    *prev,        /* Previous tile in cache */
  95.         *next;        /* Next tile in cache */
  96.   void        *tile;        /* Tile this is attached to */
  97.   ib_t        *pixels;    /* Pixel data */
  98. } ic_t;
  99.  
  100. /*
  101.  * Tile structure...
  102.  */
  103.  
  104. typedef struct
  105. {
  106.   int        dirty;        /* True if tile is dirty */
  107.   long        pos;        /* Position of tile on disk (-1 if not written) */
  108.   ic_t        *ic;        /* Pixel data */
  109. } itile_t;
  110.  
  111. /*
  112.  * Image structure...
  113.  */
  114.  
  115. typedef struct
  116. {
  117.   int        colorspace;    /* Colorspace of image */
  118.   unsigned    xsize,        /* Width of image in pixels */
  119.         ysize,        /* Height of image in pixels */
  120.         xppi,        /* X resolution in pixels-per-inch */
  121.         yppi,        /* Y resolution in pixels-per-inch */
  122.         num_ics,    /* Number of cached tiles */
  123.         max_ics;    /* Maximum number of cached tiles */
  124.   itile_t    **tiles;    /* Tiles in image */
  125.   ic_t        *first,        /* First cached tile in image */
  126.         *last;        /* Last cached tile in image */
  127.   FILE        *cachefile;    /* Tile cache file */
  128.   char        cachename[256];    /* Tile cache filename */
  129. } image_t;
  130.  
  131. /*
  132.  * Image row zooming structure...
  133.  */
  134.  
  135. typedef struct
  136. {
  137.   image_t    *img;        /* Image to zoom */
  138.   unsigned    xorig,
  139.         yorig,
  140.         width,        /* Width of input area */
  141.         height,        /* Height of input area */
  142.         depth,        /* Number of bytes per pixel */
  143.         rotated,    /* Non-zero if image needs to be rotated */
  144.         xsize,        /* Width of output image */
  145.         ysize,        /* Height of output image */
  146.         xmax,        /* Maximum input image X position */
  147.         ymax,        /* Maximum input image Y position */
  148.         xmod,        /* Threshold for Bresenheim rounding */
  149.         ymod;        /* ... */
  150.   int        xstep,        /* Amount to step for each pixel along X */
  151.         xincr,
  152.         instep,        /* Amount to step pixel pointer along X */
  153.         inincr,
  154.         ystep,        /* Amount to step for each pixel along Y */
  155.         yincr,
  156.         row;        /* Current row */
  157.   ib_t        *rows[2],    /* Horizontally scaled pixel data */
  158.         *in;        /* Unscaled input pixel data */
  159. } izoom_t;
  160.  
  161.  
  162. /*
  163.  * Basic image functions...
  164.  */
  165.  
  166. extern image_t    *ImageOpen(char *filename, int primary, int secondary,
  167.                    int saturation, int hue, const ib_t *lut);
  168. extern void    ImageClose(image_t *img);
  169. extern void    ImageSetColorSpace(cups_cspace_t cs);
  170. extern void    ImageSetMaxTiles(image_t *img, int max_tiles);
  171. extern void    ImageSetProfile(float d, float g, float matrix[3][3]);
  172.  
  173. #define     ImageGetDepth(img)    ((img)->colorspace < 0 ? -(img)->colorspace : (img)->colorspace)
  174. extern int    ImageGetCol(image_t *img, int x, int y, int height, ib_t *pixels);
  175. extern int    ImageGetRow(image_t *img, int x, int y, int width, ib_t *pixels);
  176. extern int    ImagePutCol(image_t *img, int x, int y, int height, const ib_t *pixels);
  177. extern int    ImagePutRow(image_t *img, int x, int y, int width, const ib_t *pixels);
  178.  
  179. /*
  180.  * File formats...
  181.  */
  182.  
  183. extern int    ImageReadBMP(image_t *img, FILE *fp, int primary, int secondary,
  184.                      int saturation, int hue, const ib_t *lut);
  185. extern int    ImageReadFPX(image_t *img, FILE *fp, int primary, int secondary,
  186.                      int saturation, int hue, const ib_t *lut);
  187. extern int    ImageReadGIF(image_t *img, FILE *fp, int primary, int secondary,
  188.                      int saturation, int hue, const ib_t *lut);
  189. extern int    ImageReadJPEG(image_t *img, FILE *fp, int primary, int secondary,
  190.                       int saturation, int hue, const ib_t *lut);
  191. extern int    ImageReadPIX(image_t *img, FILE *fp, int primary, int secondary,
  192.                      int saturation, int hue, const ib_t *lut);
  193. extern int    ImageReadPNG(image_t *img, FILE *fp, int primary, int secondary,
  194.                      int saturation, int hue, const ib_t *lut);
  195. extern int    ImageReadPNM(image_t *img, FILE *fp, int primary, int secondary,
  196.                      int saturation, int hue, const ib_t *lut);
  197. extern int    ImageReadPhotoCD(image_t *img, FILE *fp, int primary,
  198.                          int secondary, int saturation, int hue,
  199.                  const ib_t *lut);
  200. extern int    ImageReadSGI(image_t *img, FILE *fp, int primary, int secondary,
  201.                      int saturation, int hue, const ib_t *lut);
  202. extern int    ImageReadSunRaster(image_t *img, FILE *fp, int primary,
  203.                            int secondary, int saturation, int hue,
  204.                    const ib_t *lut);
  205. extern int    ImageReadTIFF(image_t *img, FILE *fp, int primary, int secondary,
  206.                       int saturation, int hue, const ib_t *lut);
  207.  
  208. /*
  209.  * Colorspace conversions...
  210.  */
  211.  
  212. extern void    ImageWhiteToWhite(const ib_t *in, ib_t *out, int count);
  213. extern void    ImageWhiteToRGB(const ib_t *in, ib_t *out, int count);
  214. extern void    ImageWhiteToBlack(const ib_t *in, ib_t *out, int count);
  215. extern void    ImageWhiteToCMY(const ib_t *in, ib_t *out, int count);
  216. extern void    ImageWhiteToCMYK(const ib_t *in, ib_t *out, int count);
  217.  
  218. extern void    ImageRGBToWhite(const ib_t *in, ib_t *out, int count);
  219. extern void    ImageRGBToRGB(const ib_t *in, ib_t *out, int count);
  220. extern void    ImageRGBToBlack(const ib_t *in, ib_t *out, int count);
  221. extern void    ImageRGBToCMY(const ib_t *in, ib_t *out, int count);
  222. extern void    ImageRGBToCMYK(const ib_t *in, ib_t *out, int count);
  223.  
  224. extern void    ImageCMYKToWhite(const ib_t *in, ib_t *out, int count);
  225. extern void    ImageCMYKToRGB(const ib_t *in, ib_t *out, int count);
  226. extern void    ImageCMYKToBlack(const ib_t *in, ib_t *out, int count);
  227. extern void    ImageCMYKToCMY(const ib_t *in, ib_t *out, int count);
  228. extern void    ImageCMYKToCMYK(const ib_t *in, ib_t *out, int count);
  229.  
  230. extern void    ImageRGBAdjust(ib_t *pixels, int count, int saturation, int hue);
  231.  
  232. extern void    ImageLut(ib_t *pixels, int count, const ib_t *lut);
  233.  
  234. /*
  235.  * Image scaling operations...
  236.  */
  237.  
  238. extern izoom_t    *ImageZoomAlloc(image_t *img, int x0, int y0, int x1, int y1,
  239.                         int xsize, int ysize, int rotated);
  240. extern void    ImageZoomFill(izoom_t *z, int iy);
  241. extern void    ImageZoomQFill(izoom_t *z, int iy);
  242. extern void    ImageZoomFree(izoom_t *z);
  243.  
  244.  
  245. #endif /* !_IMAGE_H_ */
  246.  
  247. /*
  248.  * End of "$Id: image.h,v 1.17 2002/12/17 18:59:28 swdev Exp $".
  249.  */
  250.